home *** CD-ROM | disk | FTP | other *** search
- {
- > ..Well.. I am back at writing a chat door for the third time.. and am
- > havin trouble with wrapping the text. It seems that when it wraps the
- > text to the next line it won't remove the text on the previous line,
- > and sometimes it won't wrap at all.. I don't have very dependable code
- > for this purpose so any help code is appreciated.. (I am using RMdoor
- > 4.2 right now..anybody seen anything better??).
-
- Hope this helps...
- }
- {$R-,S-,I+,D+,F-,V+,B-,N-,L+ }
- {$M 2048,0,0 }
-
- PROGRAM WordWrap(INPUT,OUTPUT);
- USES CRT;
-
- CONST
- FKeyCode = #0;
- Space = ' ';
- Hyphen = '-';
- BackSpace = ^H;
- CarriageReturn = ^M;
- MaxWordLineLength = 80;
-
- VAR
- WordLine : STRING[MaxWordLineLength];
- Index1 : BYTE;
- Index2 : BYTE;
- InputChar : CHAR;
-
- BEGIN
- WordLine := '';
- Index1 := 0;
- Index2 := 0;
- InputChar := Space;
-
- AssignCRT(INPUT);
- AssignCRT(OUTPUT);
- Reset(INPUT);
- ReWrite(OUTPUT);
- Writeln('Enter text (ENTER to stop) : ');
-
- InputChar := READKEY;
-
- {Do the job.}
- WHILE (InputChar <> CarriageReturn) DO
- BEGIN
- CASE InputChar OF
- BackSpace: {write destructive backspace & remove char from WordLine}
- BEGIN
- Write(OUTPUT,BackSpace,Space,BackSpace);
- Delete(WordLine,(LENGTH(WordLine) - 1),1)
- END;
- FKeyCode: {user pressed a function key, so dismiss it}
- BEGIN
- InputChar := READKEY; {function keys send two-char scan code!}
- InputChar := Space
- END
- ELSE {InputChar contains a valid char, so deal with it}
- BEGIN
- Write(OUTPUT,InputChar);
- WordLine := (WordLine + InputChar);
- IF (Length(WordLine) >= (MaxWordLineLength - 1)) THEN
- {we have to do a word-wrap}
- BEGIN
- Index1 := (MaxWordLineLength - 1);
- WHILE ((WordLine[Index1] <> Space)
- AND (WordLine[Index1] <> Hyphen) AND (Index1 <> 0))
- DO Index1 := (Index1 - 1);
- IF (Index1 = 0)
- THEN {whoah, no space was found to split line!}
- Index1 := (MaxWordLineLength - 1); {forces split}
- Delete(WordLine,1,Index1);
- FOR Index2 := 1 TO LENGTH(WordLine) DO
- Write(OUTPUT,BackSpace,Space,BackSpace);
- Writeln(OUTPUT);
- Write(OUTPUT,WordLine)
- END
- END
- END; {CASE InputChar}
- {Get next key from user.}
- InputChar := READKEY
- END; {WHILE (InputChar <> CarriageReturn)}
-
- {Wrap up the program.}
- Writeln(OUTPUT);
- Writeln(OUTPUT);
- Close(INPUT);
- Close(OUTPUT)
- END.